package main

import "fmt"

func testSlice1() {
	mySlice := []int{10, 20, 30, 40, 50}
	for _, value := range mySlice {
		//此处只是值的一个临时拷贝,并不会影响切片真正的结果。
		value *= 2
	}
	fmt.Printf("mySlice result1 is %+v\n", mySlice)

	//正确做法
	for index, _ := range mySlice {
		mySlice[index] *= 2
	}
	fmt.Printf("mySlice result2 is %+v\n", mySlice)
}

func testSlice2Point() {
	//a :=[]int 错误写法 PPT上少了{}
	a := []int{}
	//var a []int
	fmt.Printf("len(a)=%v,cap(a)=%v\n", len(a), cap(a))

	fmt.Printf("before_&a = %p\n", a)

	b := []int{1, 2, 3}
	c := a
	fmt.Printf("middle_&a = %p, middle_&b=%p,middle_&c = %p\n", a, b, c)
	a = append(b, 1)
	//当b slice的容量不够的时候 会在内存里面开辟一块新的内存 将数值存储进去 这时候内存地址就发生了改变。
	//c 依旧指向原来的地址 而a指向了b slice新的地址，此时a/b内存地址不再相等。
	fmt.Printf("after_&a = %p, &b = %p, &c = %p\n", a, b, c)
}

func main() {
	//testSlice1()
	testSlice2Point()
}
